<?php

namespace app\api\controller;

use app\BaseController;
use think\facade\Db; // 数据库的链接
class Clock extends BaseController
{
    /**
     * 报名打卡 
     */
    public function clock()
    {
        
        $UID = request()->UID;
        
        $set = getSetting('config'); // 获取设置信息

        // 查询今日是否已有打开记录
        $today = date('Y-m-d');
        $clock_record = Db::name('user_clock')->where('uid', $UID)->whereTime('addto_time', 'today')->find();

        if ($clock_record) {
            return json(['code' => 500,'msg' => '今日已报名']);
        }

        // 开启事务
        Db::startTrans();
        try {

            $data = [
                'uid' => $UID,
                'gold' => $set['signup_fee'],
                'addto_time' => time()
            ];

            Db::name('user_clock')->insert($data);
            
            // 扣除用户金牌
            userRecord($UID, $set['signup_fee'], 1,1,'打卡报名');
            Db::commit();
            return json(['code' => 200,'msg' => '打卡成功']);

        } catch (\Exception $e) {
            Db::rollback();
            return json(['code' => 500,'msg' => '系统错误']);
        }
        
    }
    /**
     * 复卡
     */

    public function re_clock()
    {
        // 查询昨天是否有打卡记录
        $clock_record = Db::name('user_clock')->where('uid', request()->UID)->whereTime('addto_time', 'yesterday')->find();
        

        if (!$clock_record) {
            return json(['code' => 500,'msg' => '昨日未报名打卡']);
        }

        // 判断是否已经打卡
        if ($clock_record['is_clock'] == 1) {
            return json(['code' => 500,'msg' => '今日已打卡']);
        }

        // 查询设置
        $set = getSetting('config'); // 获取设置信息

        // 获取当前时间段
        $now_time = date('Hi');
        
        // 判断是否在打开时间段内
        
        if ($now_time < $set['start_time'] || $now_time > $set['end_time']) {
            return json(['code' => 500,'msg' => '打卡时间已过']);

        }

        // 复卡时间 更新数据
        $data = [
            'clock_time' => time(),
            'is_clock' => 1
        ];

        // 更新打卡记录
        $res = Db::name('user_clock')->where('id', $clock_record['id'])->update($data);

        if ($res) {
            return json(['code' => 200,'msg' => '打卡成功']);
        } else {
            return json(['code' => 500,'msg' => '打卡失败']);
        }
    }

    // 报名详情
    public function detail()
    {
        $UID = request()->UID;
        // 查询用户信息 昵称 手机号 金牌数量 银牌数量

        $user = Db::name('user')->where('id', $UID)->field('name,phone,gold,silver,image')->find();

        // 查询今日是否已有报名记录
        $clock_record = Db::name('user_clock')->where('uid', $UID)->whereTime('addto_time', 'today')->find();
        if (!$clock_record) {
            // 未报名
            $user['is_clock'] = 0;
        }else{
            // 已报名
            $user['is_clock'] = 1;
        }

        // 查询今日报名人数
        $clock['day_num'] = Db::name('user_clock')->whereTime('addto_time', 'today')->count();

        // 查询昨日报名人数
        $clock['yesterday_num'] = Db::name('user_clock')->whereTime('addto_time', 'yesterday')->count();

        // 查询打卡人数
        $clock['clock_num'] = Db::name('user_clock')->where('is_clock', 1)->whereTime('addto_time', 'yesterday')->count();

        // 计算出佣金
        $set = getSetting('config'); // 获取设置信息
        
        // 未打卡人数
        $clock['yesterday_num_no'] = $clock['yesterday_num'] - $clock['clock_num'];

        if($clock['clock_num'] == 0){
            // 昨日未打卡人数
            $clock['yongjin'] = 0;
        }elseif($clock['yesterday_num_no'] == 0){
            // 昨日无未打卡人数
            $clock['yongjin'] = $set['signup_fee'];
        }else{
            // 昨日有未打卡人数 单人报名费 * 报名人数 * 销毁比例 / 100 / 已打卡人数
            $clock['yongjin'] = round($set['signup_fee'] * $clock['yesterday_num_no'] * $set['destroy_ratio'] / $clock['clock_num'] / 100,2);
        }
        // 查询今日报名用户 10条
        $today_user = Db::name('user_clock')->whereTime('addto_time', 'today')->limit(10)->select()->toArray();
        $clock['today_signup'] = $clock['day_num'] * $set['signup_fee'];
        $clock['signup_fee'] = $set['signup_fee'];
        foreach ($today_user as $k => $v) {
            $today_userinfo[$k] = Db::name('user')->field('name,phone,gold,silver,image')->where('id', $v['uid'])->find();
        }

        // 查询今日最早打开用户
        $first_clock = Db::name('user_clock')->where('is_clock', 1)->whereTime('clock_time', 'today')->order('clock_time asc')->find();
        if (!$first_clock) {
            $first_clock_user = [];
        }else{
            $first_clock_user = Db::name('user')->field('name,phone,gold,silver,image')->where('id', $first_clock['uid'])->find();
        }


        

        // 打卡记录
        return json(['code' => 200, 'data' => ['user' => $user, 'clock' => $clock,'first_clock' => $first_clock_user, 'today_user' => $today_userinfo]]);
    }
}